package cn.yeziji.forum.dao.iquery;

import cn.org.atool.fluent.mybatis.If;
import cn.yeziji.forum.common.key.CommonKey;
import cn.yeziji.forum.dto.file.ForumFilePagingDTO;
import cn.yeziji.forum.wrapper.ForumFileQuery;

/**
 * 文件条件查询构造器
 *
 * @author gzkemays
 * @since 2022/3/31 15:51
 */
public class FileQuery {

  /**
   * 根据 target 查询文件
   *
   * @param target
   */
  public static ForumFileQuery findFileByTargetQuery(String target) {
    return new ForumFileQuery().where.target().eq(target).end();
  }

  /**
   * 根据 source 和 scope 查询文件
   *
   * @param source 资源上传者
   * @param scope 资源分类
   */
  public static ForumFileQuery findFileBySourceAndScopeQuery(String source, String scope) {
    return new ForumFileQuery().where.source().eq(source).and.scope().eq(scope).end();
  }

  /**
   * 根据 scope 查询文件
   *
   * @param scope 资源分类
   */
  public static ForumFileQuery findFileByScopeQuery(String scope) {
    return new ForumFileQuery().where.scope().like(scope).end();
  }

  /**
   * 多条件查询数据
   *
   * @param dto 条件对象
   */
  public static ForumFileQuery findFilesQuery(ForumFilePagingDTO dto) {
    String scope = dto.getScope(), target = dto.getTarget(), source = dto.getSource();
    return new ForumFileQuery()
        .where
        .scope()
        .like(scope, If::notNull)
        .and
        .source()
        .eq(source, If::notNull)
        .and
        .target()
        .eq(target, If::notNull)
        .end();
  }

  /** 查询分页数据 */
  public static ForumFileQuery findFilesPagingQuery(ForumFilePagingDTO dto) {
    return findFilesQuery(dto).limit(dto.prefix(), dto.last());
  }

  /**
   * 根据 source 查询文件
   *
   * @param source 文件上传者
   */
  public static ForumFileQuery findFileBySourceQuery(String source) {
    return new ForumFileQuery()
        .where
        .source()
        .eq(source)
        .and
        .scope()
        .like(CommonKey.LOCATION_FORUM_FILE_SCOPE)
        .end();
  }
}
